package br.unicamp.ic.inf300.arena.modelo.logistico;
/**
 * Venda de Bilhetes Eletronicos para Espetaculos (Arena Entretenimento S.A.)
 * Sala.java
 */


public class Sala {
	public static final int TIPO_CONFIGURAVEL = 0;
	public static final int TIPO_CINEMA = 1;

	private int codSala;
	private int codunidade;
	private String identificacao;
	private String caracteristica;
	private int qtdTotalAssentos;
	private int tipo;
	private UnidadeNegocio unidadeNegocio;

	public Sala() {
		super();
	}

	/**
	 * 
	 * @param identificacao
	 * @param caracteristica
	 * @param qtdTotalAssentos
	 * @param unidadeNegocio
	 */
	public Sala(String identificacao, String caracteristica,
			int qtdTotalAssentos, UnidadeNegocio unidadeNegocio) {
		super();
		this.identificacao = identificacao;
		this.caracteristica = caracteristica;
		this.qtdTotalAssentos = qtdTotalAssentos;
		this.unidadeNegocio = unidadeNegocio;
	}

	/**
	 * 
	 * @param codSala
	 * @param identificacao
	 * @param caracteristica
	 * @param qtdTotalAssentos
	 * @param tipo
	 * @param unidadeNegocio
	 */
	public Sala(int codSala, String identificacao, String caracteristica,
			int qtdTotalAssentos, int tipo, UnidadeNegocio unidadeNegocio) {
		super();
		this.codSala = codSala;
		this.identificacao = identificacao;
		this.caracteristica = caracteristica;
		this.qtdTotalAssentos = qtdTotalAssentos;
		this.tipo = tipo;
		this.unidadeNegocio = unidadeNegocio;
	}

	/**
	 * ESTE METODO EH SOBRESCRITO NAS SUBCLASSES 
	 * @return Assento
	 */
	public Assento getProximoAssentoDisponivel() { return null; };
	
	public String getCaracteristica() {
		return caracteristica;
	}

	public void setCaracteristica(String caracteristica) {
		this.caracteristica = caracteristica;
	}

	public int getQtdTotalAssentos() {
		return qtdTotalAssentos;
	}

	public void setQtdTotalAssentos(int qtdTotalAssentos) {
		this.qtdTotalAssentos = qtdTotalAssentos;
	}

	public UnidadeNegocio getUnidadeNegocio() {
		return unidadeNegocio;
	}

	public void setUnidadeNegocio(UnidadeNegocio unidadeNegocio) {
		this.unidadeNegocio = unidadeNegocio;
	}

	public String getIdentificacao() {
		return identificacao;
	}

	public void setIdentificacao(String identificacao) {
		this.identificacao = identificacao;
	}

	public int getCodSala() {
		return codSala;
	}

	public void setCodSala(int codSala) {
		this.codSala = codSala;
	}

	public int getTipo() {
		return tipo;
	}

	public void setTipo(int tipo) {
		this.tipo = tipo;
	}

	public int getCodunidade() {
		return codunidade;
	}

	public void setCodunidade(int codunidade) {
		this.codunidade = codunidade;
	}

	/**
	 * @return <code>String</code>
	 * JUtils plugin ;-)
	 */
	public String toString()
	{
	    final String TAB = "    ";
	    
	    StringBuffer retValue = new StringBuffer();
	    
	    retValue.append("Sala ( ")
	        .append(super.toString()).append(TAB)
	        .append("caracteristica = ").append(this.caracteristica).append(TAB)
	        .append("codSala = ").append(this.codSala).append(TAB)
	        .append("codunidade = ").append(this.codunidade).append(TAB)
	        .append("identificacao = ").append(this.identificacao).append(TAB)
	        .append("qtdTotalAssentos = ").append(this.qtdTotalAssentos).append(TAB)
	        .append("tipo = ").append(this.tipo).append(TAB)
	        .append("unidadeNegocio = ").append(this.unidadeNegocio).append(TAB)
	        .append(" )");
	    
	    return retValue.toString();
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((caracteristica == null) ? 0 : caracteristica.hashCode());
		result = prime * result + codSala;
		result = prime * result + codunidade;
		result = prime * result + qtdTotalAssentos;
		result = prime * result + tipo;
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		final Sala other = (Sala) obj;
		if (caracteristica == null) {
			if (other.caracteristica != null)
				return false;
		} else if (!caracteristica.equals(other.caracteristica))
			return false;
		if (codSala != other.codSala)
			return false;
		if (codunidade != other.codunidade)
			return false;
		if (qtdTotalAssentos != other.qtdTotalAssentos)
			return false;
		if (tipo != other.tipo)
			return false;
		return true;
	}
}